From 1a0ef99488254f9c57da4fdbbc198503c27f5437 Mon Sep 17 00:00:00 2001 From: Jimi Xenidis Date: Thu, 13 Jul 2006 11:26:51 -0400 Subject: [PATCH] [powerpc] Handle 2 forms of NULL guest handle Signed-off-by: Jimi Xenidis --- xen/arch/powerpc/usercopy.c | 9 +++++++++ xen/include/asm-powerpc/guest_access.h | 5 ++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/xen/arch/powerpc/usercopy.c b/xen/arch/powerpc/usercopy.c index 542e70d8b8..77ec80c66c 100644 --- a/xen/arch/powerpc/usercopy.c +++ b/xen/arch/powerpc/usercopy.c @@ -231,3 +231,12 @@ void xencomm_add_offset(void *handle, unsigned int bytes) bytes -= chunk_skip; } } + +int xencomm_handle_is_null(void *ptr) +{ + struct xencomm_desc *desc; + + desc = (struct xencomm_desc *)paddr_to_maddr((unsigned long)ptr); + + return (desc->address[0] == XENCOMM_INVALID); +} diff --git a/xen/include/asm-powerpc/guest_access.h b/xen/include/asm-powerpc/guest_access.h index 7b77642318..51f6d501c2 100644 --- a/xen/include/asm-powerpc/guest_access.h +++ b/xen/include/asm-powerpc/guest_access.h @@ -26,9 +26,12 @@ extern unsigned long xencomm_copy_to_guest(void *to, const void *from, extern unsigned long xencomm_copy_from_guest(void *to, const void *from, unsigned int len, unsigned int skip); extern void xencomm_add_offset(void *handle, unsigned int bytes); +extern int xencomm_handle_is_null(void *ptr); + /* Is the guest handle a NULL reference? */ -#define guest_handle_is_null(hnd) ((hnd).p == NULL) +#define guest_handle_is_null(hnd) \ + ((hnd).p == NULL || xencomm_handle_is_null((hnd).p)) /* Offset the given guest handle into the array it refers to. */ #define guest_handle_add_offset(hnd, nr) ({ \ -- 2.30.2